/*-----------------------------------------------File Info------------------------------------------------
** File Name:               Spi_user.c  
** Last modified date:      2022.06.14
** Last version:            V0.1
** Description:             
**--------------------------------------------------------------------------------------------------------            
** Created date:            2016.09.07
** author:                  YLY
** Version:                 V0.1
** Descriptions:            spi驱动
**--------------------------------------------------------------------------------------------------------
*/
#ifndef __SPI_USER_H_
#define __SPI_USER_H_

#include "bspConfig.h"
#include "bspGPIO.h"

		
typedef enum
{
	SPI_MODE0 = 0x0,		//空闲CLK低 ,第一个时钟跳变沿采集第一个数据	
	SPI_MODE1,				//空闲CLK高 ,第一个时钟跳变沿采集第一个数据
	SPI_MODE2,				//空闲CLK低 ,第二个时钟跳变沿采集第一个数据
	SPI_MODE3,				//空闲CLK高 ,第二个时钟跳变沿采集第一个数据
}teSpiWorkMode;


typedef struct 
{
	rcu_periph_enum spiRcu;
	uint32_t spi;
	uint32_t masterSalve;		//SPI_MASTER,SPI_SLAVE
	teSpiWorkMode eWorkMode;	//
	
	tsCfgGpio nssIo;
	tsCfgGpio sckIo;
	tsCfgGpio misoIo;
	tsCfgGpio mosiIo;
}tsCfgSpi;

#define DEV_SPI0_0	/* NSS/PA4, SCK/PA5, MISO/PA6, MOSI/PA7 AF0 */ \
		{RCU_SPI0, SPI0, SPI_MASTER, SPI_MODE0, /* SPI */\
		RCU_GPIOA, GPIOA, GPIO_PIN_4, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* NSS */\
		RCU_GPIOA, GPIOA, GPIO_PIN_5, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* SCK */\
		RCU_GPIOA, GPIOA, GPIO_PIN_6, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* MISO */\
		RCU_GPIOA, GPIOA, GPIO_PIN_7, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1  /* MOSI */}

#define DEV_SPI0_1	/* NSS/PB15, SCK/PB3, MISO/PB4, MOSI/PB5 AF0 */ \
		{RCU_SPI0, SPI0, SPI_MASTER, SPI_MODE0, /* SPI */\
		RCU_GPIOA, GPIOA, GPIO_PIN_15, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* NSS */\
		RCU_GPIOB, GPIOB, GPIO_PIN_3, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* SCK */\
		RCU_GPIOB, GPIOB, GPIO_PIN_4, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* MISO */\
		RCU_GPIOB, GPIOB, GPIO_PIN_5, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1  /* MOSI */}

#define DEV_SPI0_2	/* NSS/PB12, SCK/PB13, MISO/PB14, MOSI/PB15 AF0 */ \
		{RCU_SPI0, SPI0, SPI_MASTER, SPI_MODE0, /* SPI */\
		RCU_GPIOB, GPIOB, GPIO_PIN_12, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* NSS */\
		RCU_GPIOB, GPIOB, GPIO_PIN_13, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* SCK */\
		RCU_GPIOB, GPIOB, GPIO_PIN_14, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* MISO */\
		RCU_GPIOB, GPIOB, GPIO_PIN_15, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1  /* MOSI */}
		
#define DEV_SPI1_0	/* NSS/PB12, SCK/PB13, MISO/PB14, MOSI/PB15 AF0 */ \
		{RCU_SPI1, SPI1, SPI_MASTER, SPI_MODE0, /* SPI */\
		RCU_GPIOB, GPIOB, GPIO_PIN_12, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* NSS */\
		RCU_GPIOB, GPIOB, GPIO_PIN_13, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* SCK */\
		RCU_GPIOB, GPIOB, GPIO_PIN_14, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* MISO */\
		RCU_GPIOB, GPIOB, GPIO_PIN_15, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1  /* MOSI */}		
		
#define DEV_SPI1_1	/* NSS/PA15, SCK/PB1, MISO/PB13, MOSI/PB14 AF0 */ \
		{RCU_SPI1, SPI1, SPI_MASTER, SPI_MODE0, /* SPI */\
		RCU_GPIOB, GPIOB, GPIO_PIN_15, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* NSS */\
		RCU_GPIOB, GPIOB, GPIO_PIN_1,  GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* SCK */\
		RCU_GPIOB, GPIOB, GPIO_PIN_13, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1, /* MISO */\
		RCU_GPIOB, GPIOB, GPIO_PIN_14, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_AF_0, 1  /* MOSI */}	

typedef enum
{
	NSS_LOW = 0x0,
	NSS_HI,				
}teSpiNss;	

extern void spiInit(tsCfgSpi *cfg, uint32_t rate );
extern void spiSetNss(tsCfgSpi *cfg, teSpiNss eNss);
extern uint8_t spiWriteReadByte(tsCfgSpi *cfg, uint8_t wrtieByte);
extern uint8_t spiSetRegister(tsCfgSpi *cfg, uint8_t regAddr, uint8_t regVal);
extern uint8_t spiGetRegister(tsCfgSpi *cfg, uint8_t regAddr);


#endif  		//




